import {scrollbarModel} from "../display/scrollbars.js"
import {wheelEventPixels} from "../display/scroll_events.js"
import {keyMap, keyName, isModifierKey, lookupKey, normalizeKeyMap} from "../input/keymap.js"
import {keyNames} from "../input/keynames.js"
import {Line} from "../line/line_data.js"
import {cmp, Pos} from "../line/pos.js"
import {changeEnd} from "../model/change_measurement.js"
import Doc from "../model/Doc.js"
import {LineWidget} from "../model/line_widget.js"
import {SharedTextMarker, TextMarker} from "../model/mark_text.js"
import {
    copyState,
    extendMode,
    getMode,
    innerMode,
    mimeModes,
    modeExtensions,
    modes,
    resolveMode,
    startState
} from "../modes.js"
import {addClass, contains, rmClass} from "../util/dom.js"
import {e_preventDefault, e_stop, e_stopPropagation, off, on, signal} from "../util/event.js"
import {splitLinesAuto} from "../util/feature_detection.js"
import {countColumn, findColumn, isWordCharBasic, Pass} from "../util/misc.js"
import StringStream from "../util/StringStream.js"

import {commands} from "./commands.js"

export function addLegacyProps(CodeMirror) {
    CodeMirror.off = off
    CodeMirror.on = on
    CodeMirror.wheelEventPixels = wheelEventPixels
    CodeMirror.Doc = Doc
    CodeMirror.splitLines = splitLinesAuto
    CodeMirror.countColumn = countColumn
    CodeMirror.findColumn = findColumn
    CodeMirror.isWordChar = isWordCharBasic
    CodeMirror.Pass = Pass
    CodeMirror.signal = signal
    CodeMirror.Line = Line
    CodeMirror.changeEnd = changeEnd
    CodeMirror.scrollbarModel = scrollbarModel
    CodeMirror.Pos = Pos
    CodeMirror.cmpPos = cmp
    CodeMirror.modes = modes
    CodeMirror.mimeModes = mimeModes
    CodeMirror.resolveMode = resolveMode
    CodeMirror.getMode = getMode
    CodeMirror.modeExtensions = modeExtensions
    CodeMirror.extendMode = extendMode
    CodeMirror.copyState = copyState
    CodeMirror.startState = startState
    CodeMirror.innerMode = innerMode
    CodeMirror.commands = commands
    CodeMirror.keyMap = keyMap
    CodeMirror.keyName = keyName
    CodeMirror.isModifierKey = isModifierKey
    CodeMirror.lookupKey = lookupKey
    CodeMirror.normalizeKeyMap = normalizeKeyMap
    CodeMirror.StringStream = StringStream
    CodeMirror.SharedTextMarker = SharedTextMarker
    CodeMirror.TextMarker = TextMarker
    CodeMirror.LineWidget = LineWidget
    CodeMirror.e_preventDefault = e_preventDefault
    CodeMirror.e_stopPropagation = e_stopPropagation
    CodeMirror.e_stop = e_stop
    CodeMirror.addClass = addClass
    CodeMirror.contains = contains
    CodeMirror.rmClass = rmClass
    CodeMirror.keyNames = keyNames
}
